package com.itheima.demo03;

//测试类
public class AnimalTest {
    public static void main(String[] args) {
        //测试空参构造.
        //1. 通过多态的方式创建猫类对象.
        Animal an1 = new Cat();
        //2. 给属性赋值.
        an1.setName("加菲猫");
        an1.setAge(13);
        //3.打印属性值
        System.out.println(an1.getName() + "..." + an1.getAge());
        //4. 调用eat()
        an1.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //5. 通过向下转型, 调用catchMouse()
        //an1.catchMouse();   //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Cat c = (Cat) an1;
        c.catchMouse();
        System.out.println("-----------------------------------");
        //测试全参构造.
        //1. 通过多态的方式创建猫类对象.
        Animal an2 = new Cat("机器猫", 21);
        //2.打印属性值
        System.out.println(an2.getName() + "..." + an2.getAge());
        //3. 调用eat()
        an2.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //4. 通过向下转型, 调用catchMouse()
        //an2.catchMouse();   //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Cat c2 = (Cat) an2;
        c2.catchMouse();

        System.out.println("-----------------------------------");
        //测试空参构造.
        //1. 通过多态的方式创建Dog类对象.
        Animal an3 = new Dog();
        //2. 给属性赋值.
        an3.setName("加菲狗");
        an3.setAge(5);
        //3.打印属性值
        System.out.println(an3.getName() + "..." + an3.getAge());
        //4. 调用eat()
        an3.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //5. 通过向下转型, 调用lookHome()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Dog d = (Dog) an3;
        d.lookHome();
        System.out.println("-----------------------------------");
        //测试全参构造.
        //1. 通过多态的方式创建Dog类对象.
        Animal an4 = new Dog("机器狗", 22);
        //2.打印属性值
        System.out.println(an4.getName() + "..." + an4.getAge());
        //3. 调用eat()
        an4.eat();          //多态的成员方法的访问特点: 编译看左, 运行看右.
        //4. 通过向下转型, 调用lookHome()
        //多态的弊端: 父类引用不能直接使用子类的特有成员.
        Dog d2 = (Dog) an4;
        d2.lookHome();
    }
}
